package Algorithm.hot;

import java.util.HashMap;
import java.util.Map;

public class Hot001 {
    //两数之和
//    给定一个整数数组 nums 和一个整数目标值 target，请你在该数组中找出 和为目标值 target  的那 两个 整数，并返回它们的数组下标。
//    你可以假设每种输入只会对应一个答案。但是，数组中同一个元素在答案里不能重复出现。
//    你可以按任意顺序返回答案。
//    时间复杂度：O(N^2)，其中 NN 是数组中的元素数量。最坏情况下数组中任意两个数都要被匹配一次。
//    空间复杂度：O(1)。
    public int[] twoSum1(int[] nums, int target) {
        int n=nums.length;
        for (int i = 0; i < n; i++) {
            for (int j = i+1; j <n ; j++) {
                if (nums[i]+nums[j]==target) {
                    return new int[]{i,j};
                }
            }
        }
        return new int[0];
    }


//方法二：哈希表

    public int[] twoSum2(int[] nums, int target) {
        Map<Integer, Integer> hashtable = new HashMap<Integer, Integer>();
        for (int i = 0; i < nums.length; i++) {
            if (hashtable.containsKey(target-nums[i])) {
                return new int[]{hashtable.get(target-nums[i])};
            }
            hashtable.put(nums[i],i);
        }
        return new int[0];
    }
}
